package com.ht.shortlink.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ht.shortlink.project.dao.entity.ShortLinkDO;
import com.ht.shortlink.project.dto.biz.ShortLinkStatsRecordDTO;
import com.ht.shortlink.project.dto.req.ShortLinkBatchCreateReqDTO;
import com.ht.shortlink.project.dto.req.ShortLinkCreateReqDTO;
import com.ht.shortlink.project.dto.req.ShortLinkPageReqDTO;
import com.ht.shortlink.project.dto.req.ShortLinkUpdateReqDTO;
import com.ht.shortlink.project.dto.resp.ShortLinkBatchCreateRespDTO;
import com.ht.shortlink.project.dto.resp.ShortLinkCreateRespDTO;
import com.ht.shortlink.project.dto.resp.ShortLinkGroupCountRespDTO;
import com.ht.shortlink.project.dto.resp.ShortLinkPageRespDTO;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;

import java.util.List;

/**
 *  短链接接口层
 */
public interface IShortLinkService extends IService<ShortLinkDO> {
    /**
     *  创建短链接
     * @param requestParam 短链接创建请求参数
     * @return 短链接创建响应参数
     */
    ShortLinkCreateRespDTO create(ShortLinkCreateReqDTO requestParam);

    /**
     *  短链接批量创建
     * @param requestParam 短链接批量创建请求参数
     * @return 短链接批量创建响应参数
     */
    ShortLinkBatchCreateRespDTO batchCreate(ShortLinkBatchCreateReqDTO requestParam);

    /**
     *  分页查询短链接
     * @param requestParam 分页查询短链接请求参数
     * @return 查询短链接响应参数
     */
    IPage<ShortLinkPageRespDTO> queryPage(ShortLinkPageReqDTO requestParam);

    /**
     *  查询短链接数量
     * @param requestParam gid集合
     * @return 查询短链接数量响应参数集合
     */
    List<ShortLinkGroupCountRespDTO> listGroupLinkCount(List<String> requestParam);

    /**
     *  更新短链接
     * @param requestParam 短链接更新请求参数
     * @return 短链接更新响应参数
     */
    void update(ShortLinkUpdateReqDTO requestParam);

    /**
     *  短链接跳转
     * @param shortUri 输入的uri
     * @param request  http请求
     * @param response http响应
     */
    void restoreUrl(String shortUri, ServletRequest request, ServletResponse response);

    /**
     *  短链接统计
     * @param gid 分组标识
     * @param statsRecord 统计记录实体
     */
    void shortLinkStats(String gid, ShortLinkStatsRecordDTO statsRecord);
}
